需要記得的東西出現了... (´・ω・`)
在進入部署以前,要先認識 Kubernetes 設定檔的格式。
Kubernetes 的設定只支援 yaml
和 json
,json
用於 API 傳遞,yaml
則是用在設定和配置。
有件事很重要:
yaml 區分大小寫
基本架構很單純,絕大多數配置都是以這個模板去延伸,先記得就對了!
apiVersion:
kind:
metadata:
spec:
apiVersion: v1
kind: Pod
metadata:
name: <pod名稱>
labels:
app: myapp
spec:
conatiners:
- name: <container名稱>
image: <要部署的image>
- name: <container名稱>
image: <要部署的image>
)區分-
符號為項目分界有興趣可以往下看看 apiVersion,或是有需要再 Google 就好
如果怕忘了元件對應的 apiVersion
,可以用這個指令確認
kubectl api-resources
(紅色標示為較常使用的基礎元件)
KIND | SHORTNAMES | APIVERSION | NAMESPACED |
---|---|---|---|
Binding |
v1 | true | |
ComponentStatus | cs | v1 | false |
ConfigMap |
cm | v1 | true |
Endpoints |
ep | v1 | true |
Event | ev | v1 | true |
LimitRange | limits | v1 | true |
Namespace |
ns | v1 | false |
Node |
no | v1 | false |
PersistentVolumeClaim |
pvc | v1 | true |
PersistentVolume |
pv | v1 | false |
Pod |
po | v1 | true |
PodTemplate | v1 | true | |
ReplicationController | rc | v1 | true |
ResourceQuota | quota | v1 | true |
Secret | v1 | true | |
ServiceAccount |
sa | v1 | true |
Service |
svc | v1 | true |
MutatingWebhookConfiguration | admissionregistration.k8s.io/v1 | false | |
ValidatingAdmissionPolicy | admissionregistration.k8s.io/v1 | false | |
ValidatingAdmissionPolicyBinding | admissionregistration.k8s.io/v1 | false | |
ValidatingWebhookConfiguration | admissionregistration.k8s.io/v1 | false | |
CustomResourceDefinition | crd,crds | apiextensions.k8s.io/v1 | false |
APIService | apiregistration.k8s.io/v1 | false | |
ControllerRevision | apps/v1 | true | |
DaemonSet | ds | apps/v1 | true |
Deployment |
deploy | apps/v1 | true |
ReplicaSet |
rs | apps/v1 | true |
StatefulSet | sts | apps/v1 | true |
SelfSubjectReview | authentication.k8s.io/v1 | false | |
TokenReview | authentication.k8s.io/v1 | false | |
LocalSubjectAccessReview | authorization.k8s.io/v1 | true | |
SelfSubjectAccessReview | authorization.k8s.io/v1 | false | |
SelfSubjectRulesReview | authorization.k8s.io/v1 | false | |
SubjectAccessReview | authorization.k8s.io/v1 | false | |
HorizontalPodAutoscaler | hpa | autoscaling/v2 | true |
CronJob | cj | batch/v1 | true |
Job | batch/v1 | true | |
CertificateSigningRequest | csr | certificates.k8s.io/v1 | false |
Lease | coordination.k8s.io/v1 | true | |
EndpointSlice | discovery.k8s.io/v1 | true | |
Event | ev | events.k8s.io/v1 | true |
FlowSchema | flowcontrol.apiserver.k8s.io/v1 | false | |
PriorityLevelConfiguration | flowcontrol.apiserver.k8s.io/v1 | false | |
IngressClass | networking.k8s.io/v1 | false | |
Ingress | ing | networking.k8s.io/v1 | true |
NetworkPolicy | netpol | networking.k8s.io/v1 | true |
RuntimeClass | node.k8s.io/v1 | false | |
PodDisruptionBudget | pdb | policy/v1 | true |
ClusterRoleBinding | rbac.authorization.k8s.io/v1 | false | |
ClusterRole | rbac.authorization.k8s.io/v1 | false | |
RoleBinding | rbac.authorization.k8s.io/v1 | true | |
Role | rbac.authorization.k8s.io/v1 | true | |
PriorityClass | pc | scheduling.k8s.io/v1 | false |
CSIDriver | storage.k8s.io/v1 | false | |
CSINode | storage.k8s.io/v1 | false | |
CSIStorageCapacity | storage.k8s.io/v1 | true | |
StorageClass | sc | storage.k8s.io/v1 | false |
VolumeAttachment | storage.k8s.io/v1 | false |
從上表不難發現,apiVersion有不同格式,雖然格式有些複雜,但其實有其規則可循:
apiVersion | Resources |
---|---|
v1 | Pod, Service, ConfigMap, Secret |
apps/v1 | Deployment, ReplicaSet, StatefulSet, DaemonSet |
batch/v1 | Job, CronJob |
networking.k8s.io/v1 | Ingress, NetworkPolicy |
storage.k8s.io/v1 | StorageClass, VolumeAttachment |
不同的 apiVersion 可能會改變資源的定義方式,新版本可能引入新功能,也可能棄用舊功能,通常 v1
表示穩定版本,beta
(如 v1beta1)為預計發佈版,alpha
則為測試版,可能在未來更新時出現變化,使用時須特別留意。
欸!為什麼 Event 有兩個版本?
是新舊版本的差異,
events.k8s.io/v1
是比較新的版本(也是社群比較建議使用的)。
雖說舊版 v1 並未停用,從最新版 v1.31和前一版 v1.30(stable)的 API 文件都還可以確認仍有支援,但若直接從官方文件搜尋:Event,就只會看到 events.k8s.io/v1 的版本,什麼意思應該不言而喻了吧... (・_・;相關的討論可以參考:core v1 Event API needs improvement?
我不會告訴你查這些文件花了多久時間,五告拍揣。
在學習 Kubernetes 的過程中,掌握用於定義和配置的 yaml 格式是無可避免的,雖說細部配置複雜,但先記住主要格式再慢慢擴充設定,一定能逐漸熟練的!